/**
 * Printmedium Subklasse von Medium, Superklasse der Klassen
 * Zeitschrift, Ebook und Buch.
 *  
 * Alle Methoden mit setze...() weisen einer Variablen einen Wert zu.
 * Alle gib...() Methoden liefern den Wert der jeweiligen Variablen
 * zurueck. Alle ...Hinzufuegen Methoden fuegen einen Wert einer Liste 
 * hinzu.
 * 
 * Datei: Printmedium.java         Autor: Simon Schindelmann 
 * Datum: 05.11.11                 Version: 0.2
 * 
 * Historie: 
 * 05.11.11   v0.1    Klasse wurde angelegt.
 * 15.12.11   v0.2    gibBeteiligteString () Methode angelegt um die
 *                    Namen der Beteiligten als String zurueck zugeben.
 * 
 */

package medienverwaltung;

import java.util.*;
import personenverwaltung.Person;


public class Printmedium extends Medium 
{
  private static final long serialVersionUID = 6835954467026743108L;
  private ArrayList<Person> beteiligtListe = new ArrayList<Person> ();

  public Printmedium (String titel, String datum, Abmessung abmessung)
      throws KeinDatumFormat
  {
    super (titel, datum, abmessung);
    initial = "PM";
  }


  public Printmedium (String titel, String datum, Abmessung abmessung,
      String verlag, String ausgabe) throws KeinDatumFormat
  {
    super (titel, datum, abmessung, verlag, ausgabe);
    initial = "PM";
  }

  
  /**
   * Fuegt beteiligte Personen hinzu.
   * @param namen Namen der beteiligten Personen.
   * @throws NameEnthaeltZahlenSonderzeichen
   */
  public void beteiligteHinzufuegen (String namen)
      throws NameEnthaeltZahlenSonderzeichen
  {
    beteiligtListe.clear ();
    beteiligteSetzen (namen);
  }

  
  /**
   * Gibt eine Liste mit den Beteiligten Personen zurueck.
   * @return ArrayListe mit den beteiligten Personen.
   */
  public ArrayList<Person> gibBeteiligte ()
  {
    return beteiligtListe;
  }
  
  
  /**
   * Gibt die Namen der beteiligten Personen als String zurueck.
   * @return String mit den Namen der beteiligten Personen.
   */
  public String gibBeteiligteString ()
  {
    String beteiligte = "";
    for (int i = 0; i < beteiligtListe.size (); i++)
    {
      Person b = beteiligtListe.get (i);
      if (i < (beteiligtListe.size () - 1))
      {
        beteiligte = beteiligte + "" + b.gibVornamen () + " "
            + b.gibNachname () + ", ";
      }
      else
      {
        beteiligte = beteiligte + "" + b.gibVornamen () + " "
            + b.gibNachname ();
      }
    }
    return beteiligte;
  }


  /**
   * Der String mit den beteilgten Personen wird hier uebergeben. Der
   * String wird von einer Namenparser-Methode zerlegt und eine
   * ArrayList wird zurueck geliefert. Die Enthaelt pro Namen ein Array.
   * Das Array enthaelt jeden Teilnamen des kompletten Namens. Dann
   * werden die namen in den Arrays bis zur vorletzten Stelle im String
   * vorname gespeichert und der letzte Arraywert ist der Nachname der
   * wird im String nachname gespeichert. Aus den beiden Strings kann
   * dann ein Objekt Person erzeugt werden und der beteiligtListe
   * hinzugefuegt werden.
   * 
   * @param beteiligte hier wird ein String mit den Namen der
   * beteiligtenPersonen uebergeben.
   */
  private void beteiligteSetzen (String beteiligte)
      throws NameEnthaeltZahlenSonderzeichen
  {
    ArrayList<String[]> temp = new ArrayList<String[]> ();
    temp = NamenParser.parsen (beteiligte);
    String[] buffer;
    Person p;

    for (int i = 0; i < temp.size (); i++)
    {
      buffer = temp.get (i);
      String vorname = "";
      String nachname = "";

      for (int j = 0; j < buffer.length; j++)
      {
        if (j < (buffer.length - 1))
        {
          vorname = "" + buffer[j];
        }
        else
        {
          nachname = "" + buffer[j];
        }
      }
      p = new Person (vorname, nachname);
      beteiligtListe.add (p);
    }
  }
}